/* 递推和递归
* 

* 本题:
    每个灯最多按一次，答案与俺的顺序无关
    假设第一行的开关已经锁死
    ->只要第一行开关的状态确定，则所有开关的状态都可以被推出来

*/
#define DEBUG
#pragma GCC optimize("O1,O2,O3,Ofast")
#pragma GCC optimize("no-stack-protector,unroll-loops,fast-math,inline")
#pragma GCC target("avx,avx2,fma")
#pragma GCC target("sse,sse2,sse3,sse4,sse4.1,sse4.2,ssse3")

#include <iostream>
#include <cstring>
using namespace std;
const int N = 6;
const int dx[5] = {-1, 0, 1, 0, 0};
const int dy[5] = {0, -1, 0, 1, 0};

char g[N][N], bg[N][N]; //操作图 原图

void turn(int x, int y) //按x行y列的开关
{
    for(int k = 0; k < 5; k++)
    {
        int nx = x + dx[k], ny = y + dy[k];
        if(nx < 0 || nx >= 5 || ny < 0 || ny >= 5) continue;
        g[nx][ny] ^= 1;
    }
}


signed main()
{
    #ifdef DEBUG
        freopen("./in.txt", "r", stdin);
    #else
        ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    #endif
    
    int T; cin >> T;
    while(T--) {

        for(int i = 0; i < 5; i++) cin >> bg[i];

        int res = 10;
        for(int op = 0; op < 32; op++)//枚举第一行开关状态
        {
            int cnt = 0;
            memcpy(g, bg, sizeof g);
            
            //操作第一行开关
            for(int i = 0; i < 5; i++)
                if(op >> i & 1)
                {
                    turn(0, i);
                    cnt++;
                }
            //递推出1~4行开关
            for(int i = 0; i < 4; i++)  
                for(int j = 0; j < 5; j++)
                    if(g[i][j] == '0') //当前位置是0，需要按下一行对应的开关
                    {
                        turn(i+1, j);
                        cnt++;
                    }
            //检查最后一行灯是否全亮
            bool success = true;
            for(int i = 0; i < 5; i++)
                if(g[4][i] == '0')
                    success = false;
            if(success && res > cnt) res = cnt;
        }           
        if(res > 6) res = -1;
        cout << res << endl;
    }
    return 0;
}